import lombok.extern.slf4j.Slf4j;

/**
 * 在两个线程之间交互结果的设计模式  GuardedObject
 *
 * @author 管子
 * @date 2025/4/23 20:50
 * @description: TestWaitAndNotify 类
 */
@Slf4j
public class TestWaitAndNotify {

    public static void main(String[] args) {
        GuardedObject guardedObject = new GuardedObject();
        new Thread(() -> {
            // 等待结果
            log.info("等待结果");
//            Object o = guardedObject.get();
            Object o = guardedObject.get(3000L);
            log.info("获取到结果: {}", o);
        }, "t1").start();

        new Thread(() -> {
            // 产生结果
            log.info("执行并产生结果");
            try {
                Thread.sleep(2000L);
//                guardedObject.complete("123");
                guardedObject.complete(null); // 虚假唤醒，虽然唤醒，但是没有给结果，导致while (response == null) 继续循环
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "t2").start();
    }

}
